package com.iotp.dao.organization;

import com.iotp.entity.organization.Organization;
import org.apache.ibatis.annotations.Mapper;

import java.util.HashMap;
import java.util.List;

/**
 * 系统机构DAO接口
 * @author Assassin
 */
@Mapper
public interface OrganizationDAO {

	// Methods

   /**
	* 插入系统机构
	* @param organization 参数实体
	* @return orgId 插入后的数据库主键值
	*/
	public Long insert(Organization organization);

   /**
	* 删除系统机构
	* @param orgId 主键值
	*/
	public void delete(Long orgId);

   /**
	* 更新系统机构
	* @param organization 参数实体
	*/
	public void update(Organization organization);

   /**
	* 主键查询系统机构
	* @return Organization 实体
	*/
	public Organization selectById(Long orgId);

   /**
	* 根据条件查询系统机构列表
	* @param organization 参数实体
	* @return List<Organization> 实体List
	*/
	public List<Organization> selectList(Organization organization);
	
	/**
	 * 根据机构级别和父机构Id查询当前数据库机构最大编码
	 * @return currentMaxOrgCode
	 */
	public String selectCurrentMaxOrgCode(HashMap<String, Object> paramsMap);
	
	/**
	 * 更新机构是否父级信息
	 * @param paramsMap 参数Map
	 */
	public void updateIsParent(HashMap<String, Object> paramsMap);

	/**
	 * 更新机构状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDel(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据父机构Id更新机构状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDelByPid(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据父Id查询子机构信息
	 * @param paramsMap 参数Map
	 * @return List<Organization>
	 */
	public List<Organization> selectSubList(HashMap<String, Object> paramsMap);
	
	/**
	 * 查询用户机构信息
	 * @param userId 用户Id
	 * @return List<Organization>
	 */
	public List<Organization> selectUserOrgs(Long userId);
	
}